Package-level declarations
Types
Everything one run of the multi-signal collector needs beyond the candidate propositions themselves: a run id to tag its trace rows with, which context it's sweeping, whether it should hold off on anything that isn't read-only, and a clock so tests can pin "now".
Picks the one proposition in a component that survives a merge; everyone else in the component gets folded into it. Pulled out as a seam so a caller can plug in a different policy.
Scores how much two propositions' entity mentions overlap, as Jaccard similarity of their stable mention ids.
Scores how much two propositions' grounding chunk ids overlap, as Jaccard similarity. Two propositions extracted from the same source chunks are more likely restating the same fact.
Scores how similar two propositions' surface text is, using Commons Text's Jaro-Winkler similarity.
Composes any number of candidate-pair sources and signal scorers into one duplicate-collapse strategy, replacing the single-cosine cut in com.embabel.dice.projection.memory.DuplicateCollectorStrategy with a pluggable multi-signal blend.
Vetoes a merge when two propositions share an entity but assert opposite polarity about it — one states something, the other negates it ("works at Acme" vs "no longer works at Acme" / "left Acme").
Scores how much two propositions' rich provenance overlaps, as Jaccard similarity of their com.embabel.dice.provenance.SourceLocators. Locators compare by structural equality, so this catches "same source material" even when grounding chunk ids differ or are absent.
Proposes candidate pairs from the repository's own vector clustering, the same recall path com.embabel.dice.projection.memory.DuplicateCollectorStrategy uses today.
Turns the cosine similarity a VectorCandidatePairSource already computed into a signal score, without re-embedding anything.
Properties
Default CollectorSurvivorPolicy: highest effective confidence, then reinforcement count, then stable id, so a full tie is still deterministic.